let images: any = {}

const MapboxImageManager = {
    /**
 * 加载并添加图像到地图样式
 * @param {string} imageName - 图标的名称
 * @param {string} imageUrl - 图标的 URL 或路径
 * @param {Function} callback - 回调函数，在图标加载完成后执行
 */
    loadAndAddImage(map: any, imageName: string | number, imageUrl: any, callback: () => void) {
        if (images[imageName]) {
            console.log(`Image "${imageName}" is already loaded.`);
            if (callback) callback();
            return;
        }

        map.loadImage(imageUrl, (error: any, image: any) => {
            if (error) {
                console.error(`Failed to load image: ${error}`);
                return;
            }

            // 添加图像到地图
            map.addImage(imageName, image);
            images[imageName] = image; // 保存图标信息

            console.log(`Image "${imageName}" loaded and added to map.`);
            if (callback) callback();
        });
    },
    /**
 * 获取已加载的图标
 * @param {string} imageName - 图标的名称
 * @returns {object|null} - 返回图标图像对象，未加载则返回 null
 */
    getImage(imageName: string | number): object | null {
        return images[imageName] || null;
    },
    /**
 * 更新已添加的图标
 * @param {string} imageName - 图标的名称
 * @param {string} newImageUrl - 新的图标 URL 或路径
 * @param {Function} callback - 回调函数
 */
    updateImage(map: any, imageName: any, newImageUrl: string | number, callback: any) {
        // 删除旧图标
        MapboxImageManager.removeImage(map, imageName);

        // 加载并添加新的图标
        MapboxImageManager.loadAndAddImage(map, imageName, newImageUrl, callback);
    },
    /**
    * 删除图标
    * @param {string} imageName - 图标的名称
    */
    removeImage(map: any, imageName: string | number) {
        if (images[imageName]) {
            map.removeImage(imageName);
            delete images[imageName]; // 删除记录
            console.log(`Image "${imageName}" removed from map.`);
        } else {
            console.log(`Image "${imageName}" not found.`);
        }
    },
    /**
 * 清空所有加载的图标
 */
    clearAllImages(map: any) {
        for (const imageName in images) {
            if (images.hasOwnProperty(imageName)) {
                map.removeImage(imageName);
            }
        }
        images = {}; // 清空图标记录
        console.log("All images have been removed from the map.");
    }
}

export { MapboxImageManager }; 